/*
 *    This program is free software; you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
 *    the Free Software Foundation; either version 2 of the License, or
 *    (at your option) any later version.
 *
 *    This program is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *    GNU General Public License for more details.
 *
 *    You should have received a copy of the GNU General Public License
 *    along with this program; if not, write to the Free Software
 *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 *    2010 year
 *    Author: Michael Khromov aka MikeDM (Mike D'Morto)
 *    E-Mail: mikedmorto@gmail.com
 */
#include "tspl_core_users_mng.h"
#include "def.h"
bool Tspl_core_users_mng::qinit(const QString &cfgstr, const QString & lang,
                                const QString &curruser, const QString & filebase,
                                QList<TsIfaceWrkPlugin*> * pllist){
    // устанавливаем локализацию
    emit this->sigPutLog(PLUGIN_NAME,2,QString("start translate %1").arg(lang));
    QTranslator * trans = new QTranslator();
    if(trans->load(QString(":/%1/lang/%2.qm").arg(PLUGIN_NAME).arg(lang))){
        emit this->sigPutLog(PLUGIN_NAME,2,QString("success translate %1").arg(lang));
        QCoreApplication::installTranslator(trans);
    }else{
        emit this->sigPutLog(PLUGIN_NAME,2,QString("fail translate %1").arg(lang));
    }
    // данный плагин выполняет две роли:
    // 1 - редактирование пользователей
    // 2 - просмотр пользователей.
    // его конфигурационная строка выглядит так
    // "mode=ro" "mode=rw"
    // ищем в строке конфига mode по умолчанию режим в только чтение
    bool mode=false; // false = ro, true = rw

    emit this->sigPutLog(PLUGIN_NAME,3,"Debug: parse parameters");
    QStringList pr=cfgstr.split(",");
    for(int i = 0; i < pr.size(); i++){
        emit this->sigPutLog(PLUGIN_NAME,3,"Debug: parameter "+QString::number(i)+"="+pr.at(i));
        if(QString(pr.at(i)).split("=").at(0)=="mode"){
            // нашли в конфиге режим работы
            if(QString(pr.at(i)).split("=").at(1) == "ro"){
                mode=false;
            }else{
                if(QString(pr.at(i)).split("=").at(1) == "rw"){
                    mode=true;
                }
            }

        }
    }




    list = pllist;
    this->dia = new Dusersmng(mode);
    // цепляем сигналы слоты
    connect(this->dia,SIGNAL(sigGetUsersList()),this,SLOT(slotGetUsersList()));
    return true;
}

bool Tspl_core_users_mng::qstart(){
    this->Step=Tspl_core_users_mng::Init;
    // отображаем главный диалог
    return this->dia->dstart();
}

QString Tspl_core_users_mng::getName(){
    return tr("Users managment");
}

void Tspl_core_users_mng::slotDb(const QString &plName, int id, QSqlQuery *ret){
    QList<Ui::Suser> userslist;
    // ловим ответ от бд.
    if(plName==PLUGIN_NAME){
        emit this->sigPutLog(PLUGIN_NAME,2,"Success reply");
        switch(this->Step){
        case Tspl_core_users_mng::GetUsersList:
            // пришел ответ списка пользователей.
            emit this->sigPutLog(PLUGIN_NAME,2,"Recive users list is success");
            while(ret->next()){
                //qDebug()<<"STRING "<<ret->value(0).toString()<<ret->value(1).toString();
                Ui::Suser user;
                user.username=ret->value(0).toString();
                user.info=ret->value(1).toString();
                userslist.append(user);
            }
            // отдаем список диалогу
            this->dia->setUserslist(userslist);
            break;
        default:
            break;
        }
    }

}

void Tspl_core_users_mng::slotDbErr(const QString &plName, const QString &errtext){
    // ловим ответ от бд.
    if(plName==PLUGIN_NAME){
        emit this->sigPutLog(PLUGIN_NAME,2,"Failure reply");
        switch(this->Step){
        case Tspl_core_users_mng::GetUsersList:
            // пришел ответ списка пользователей.
            emit this->sigPutLog(PLUGIN_NAME,2,"Recive users list is fail");
            // сообщаем диалогу об эпик фейле.
            this->dia->setUsersListE();
            break;
        default:
            break;
        }
    }
}


// синхронный режим. в стандартном исполнении он не нужен. но может пригодиться.
// так что здесь просто заглушко
void Tspl_core_users_mng::slotRstartS(const QString pl_name){}
// ответ положительный с данными по запросу.
void Tspl_core_users_mng::slotFinishS(const QString & plName , QSqlQuery * ret){}
// ответ отрицательный с данными по ошибке
void Tspl_core_users_mng::slotFinishErrS(const QString & plName , const QString & errtext){}

//ловим вопросы от диалога
void Tspl_core_users_mng::slotGetUsersList(){
    // ставим шаг получения списка пользователей
    this->Step=Tspl_core_users_mng::GetUsersList;
    qDebug()<<"SLOT GETUSERSLIST";
    QList<QVariant> aa;
    emit this->sigPutLog(PLUGIN_NAME,2,"query get users list");
    emit this->sigQexec(PLUGIN_NAME,"get_users_list",aa);
}


Q_EXPORT_PLUGIN2(TsIfaceWrkPlugin,Tspl_core_users_mng)
